####################################################
# Python数据可视化——使用Matplotlib创建散点图

# NumPy是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
# Matplotlib 是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互环境生成出版质量级别的图形
####################################################

# datingTestSet2.txt文件中的数据类型: 每年获得的飞行里程数,游戏耗时百分比,每周消费的冰淇淋公升数,分类结果(1,2,3三种分类结果)

from numpy import *
import matplotlib
import matplotlib.pyplot as plt


# 解析文件, 可输出矩阵和类标签向量;  将文本记录转换为Numpy的解析程序
def file2matrix(filename):
    # 打开文件
    fr = open(filename)
    # 获取文件的行数
    numberOfLines = len(fr.readlines())
    # 初始化二维数组
    returnMat = zeros((numberOfLines, 3))
    # 初始化类标签向量
    classLabelVector = []
    fr = open(filename)
    index = 0
    for line in fr.readlines():
        # 去除每行的前后空格
        line = line.strip()
        # 获取某行并切割成数组
        listFromLine = line.split('\t')
        # 将行数组赋值给二维矩阵
        returnMat[index, :] = listFromLine[0:3]
        # 一个数组a=[0,1,2,3,4]，a[-1]表示数组中最后一位，a[:-1]表示从第0位开始直到最后一位，a[::-1]表示倒序，从最后一位到第0位。
        classLabelVector.append(int(listFromLine[-1]))
        index += 1
    return returnMat, classLabelVector


datingDataMat, datingLabels = file2matrix('../datingTestSet2.txt')
# 获取二维数组的索引从0到5, 数组前包括,后面不包括
datingDataMat[0:6]
datingLabels[0:6]

# 创建绘图
fig = plt.figure()
# 创建单个子图
ax = fig.add_subplot(111)
# 散点的形状
# 将二维数组的所有行的索引为1的列作为X轴, 将索引为2的作为Y轴
ax.scatter(datingDataMat[:,1],datingDataMat[:,2])
# 显示图形
plt.show()
